/**
 *Object.prototype.isPrototypeOf(object)方法测试一个对象是否存在于另一个对象的原型链上
 * 参数prototype:必需,对象原型
 * 参数obj:必需，在该对象原型链进行检测
 * 如果 object 的原型链中具有 prototype，则 isPrototypeOf 方法返回 true。原型链用于在同一个对象类型的不同实例之间共享功能。
 * 当 object 不是对象或当 prototype 没有出现在 object 的原型链中时，isPrototypeOf 方法返回 false。
 **/
//原型
// 函数对象
function person() {
}
person.prototype.name = '张三'; //原型属性
person.prototype.age = 24;//原型属性
person.prototype.run = function () {  //原型方法
    return this.name + "," + this.age + '运行中...'
}

var obj1 = new person();
obj1.name = 'jack';//实例属性  并没有重写原型属性，  先查找构造函数实例属性 如果没有就查找原型属性(就近原则)
console.log('obj1:' + obj1.name)
console.log(obj1.run())

var obj2 = new person();
console.log('obj2:' + obj2.name) //实例属性不会共享，所以obj2访问不到实例属性，就只能访问原型属性

console.log(person.prototype.isPrototypeOf(obj1))//true
console.log(obj1.run == obj2.run)//true  检测obj1和obj2的run方法是否指向同一个地址
console.log(obj1.__proto__)//_proto_:这个属性是一个指针指向prototype原型对象。
console.log(obj1.constructor)//constructor:构造属性，可以获取构造函数本身，作用是通过被原型指针定位，然后得到构造函数本身，
console.log('========================');

//我们知道MyObject是继承自Object对象的，而在JS中，继承是通过prototype来实现的，所以Object的prototype必定在MyObject对象实例的原型链上。
function myObject(){}
var obj=new myObject();
console.log(Object.prototype.isPrototypeOf(obj));